home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_asm / objxref / xrextn.asm < prev    next >
Assembly Source File  |  1986-04-25  |  2KB  |  94 lines

  1.  PAGE    81,128
  2.  TITLE    XREXTN    - Process External References
  3.  SUBTTL    V1.0 - May 1986    - Cross    Reference Facility
  4. ;
  5. ;=============================================================================|
  6. ;         Copyright 1986 - Dan Daetwyler - Springdale, AR 72764          |
  7. ;=============================================================================|
  8.     .SALL
  9. ;
  10. DATA    SEGMENT    BYTE PUBLIC 'DATA'
  11. ;
  12.     EXTRN    MNCUR:WORD
  13. ;
  14.     PUBLIC    MEXTN,MEEND,MECNT,MEPTR
  15. ;
  16. MEXTN    DB    30050 DUP (?)        ;Space for 2000    12 byte    names +    ptrs
  17. MEEND    EQU    $
  18. MECNT    DW    ?
  19. MEPTR    DW    MEXTN
  20. ;
  21. ABTMSG    DB    13,10,'Over 2000 externals - Stack overflow - Terminating$'
  22. ;
  23. DATA    ENDS
  24. ;
  25. CODE    SEGMENT    BYTE PUBLIC 'CODE'
  26.     ASSUME    CS:CODE,DS:DATA,ES:DATA
  27. ;
  28. ;==============================================================================
  29. ; Entry    Point    XREXTN                                  |
  30. ;==============================================================================
  31. ;                                          |
  32. ; This procedure processes the EXTDEF record, and extracts all external          |
  33. ; reference names.  It also associates the names with a    pointer    to the          |
  34. ; module name stack for    the module currently active.                  |
  35. ;                                          |
  36. ; Entry    conventions:    DS:SI points to    the record                  |
  37. ;            CX contains the    record length                  |
  38. ;                                          |
  39. ; Returns:        None.                              |
  40. ;                                          |
  41. ;==============================================================================
  42. ;
  43.     EXTRN
  44. ;
  45.     PUBLIC    XREXTN
  46. ;
  47. XREXTN    PROC    NEAR
  48.     DEC    CX            ;Discard checksum length
  49. LP:    CALL    STKNAM            ;Put name in stack
  50.     LOOP    LP            ;Discard type index count
  51.     RET
  52. XREXTN    ENDP
  53. ;
  54. STKNAM    PROC    NEAR
  55.     PUSH    BX
  56.     MOV    BX,CX
  57.     MOV    DX,13
  58.     MOV    CL,BYTE    PTR [SI]    ;Get name length
  59.     MOV    DI,MEPTR        ;Point to next stack entry
  60.     XOR    CH,CH
  61.     JCXZ    EXIT
  62.     INC    CX            ;Count length byte
  63.     SUB    BX,CX
  64.     SUB    DX,CX
  65.     REP    MOVSB            ;Move in name with length prefix
  66.     OR    DX,DX
  67.     JZ    NOPAD
  68.     MOV    CX,DX
  69.     MOV    AL,' '            ;Pad name to 12    bytes
  70.     REP    STOSB
  71. NOPAD:    MOV    AX,MNCUR        ;Get current module name ptr
  72.     STOSW                ;  and save in stack
  73.     MOV    MEPTR,DI
  74.     CMP    DI,OFFSET MEEND
  75.     JA    ABORT
  76.     INC    MECNT            ;Count names in    stack
  77.     MOV    CX,BX
  78.     INC    SI            ;Step over type    byte
  79.     POP    BX
  80.     RET
  81. EXIT:    MOV    CX,1
  82.     POP    BX
  83.     RET
  84. ABORT:    MOV    DX,OFFSET ABTMSG
  85.     MOV    AH,9
  86.     INT    21H
  87.     MOV    AX,4C01H
  88.     INT    21H            ;Terminate
  89. STKNAM    ENDP
  90. ;
  91. CODE    ENDS
  92. ;
  93.     END
  94.